函数

fegetround (C++11)

int fegetround(void);

获取舍入方向模式

返回当前 浮点环境 中表明舍入方向模式的值。

这个函数的返回值不一定和 cfloatFLT_ROUNDS 的值相同。

参数

返回值

如果这个函数能决定当前舍入模式,并且被当前实现支持,那么函数返回值对应的宏定义如下:

宏值 描述
FE_DOWNWARD 向下舍入模式 ()
FE_TONEAREST 四舍五入模式 ()
FE_TOWARDZERO 朝零舍入模式 ()
FE_UPWARD 向上舍入模式 ()

特定的库实现可能会支持附加的 浮点舍入方向 值(它们对应的宏同样以 FE_ 开头的宏)。

C99

库可能定义在 <fenv.h>,仅仅支持上面这些宏值(其他可能没有被定义)。

C++11

至少上面所有的宏值都定义在 <fenv.h> 中(即使实现不支持)。

例子

  1. /* fegetround / rint example */
  2. #include <stdio.h> /* printf */
  3. #include <fenv.h> /* fegetround FE_* */
  4. #include <math.h> /* rint */
  5. int main()
  6. {
  7. printf("Rounding using ");
  8. switch(fegetround())
  9. {
  10. case FE_DOWNWARD:
  11. printf("downward");
  12. break;
  13. case FE_TONEAREST:
  14. printf("to-nearset");
  15. break;
  16. case FE_TOWARDZERO:
  17. printf("toward-zero");
  18. break;
  19. case FE_UPWARD:
  20. printf("upward");
  21. break;
  22. default:
  23. printf("unknown");
  24. }
  25. printf(" rounding:\n");
  26. printf("rint (2.3) = %.1f\n", rint(2.3));
  27. printf("rint (3.8) = %.1f\n", rint(3.8));
  28. printf("rint (-2.3) = %.1f\n", rint(-2.3));
  29. printf("rint (-3.8) = %.1f\n", rint(-3.8));
  30. return 0;
  31. }

可能的输出:

  1. Rounding using to-nearset rounding:
  2. rint (2.3) = 2.0
  3. rint (3.8) = 4.0
  4. rint (-2.3) = -2.0
  5. rint (-3.8) = -4.0

数据竞争

每个线程都保持着分离的、拥有自己状态的 浮点环境 。产生一个新线程就复制当前状态。[ 这个适用于 C11 和 C++11 的实现 ]

异常

不抛出异常的保证:这个函数从不抛出异常。

另请参见

函数 描述
fesetround 设置舍入方向模式 (函数)
fegetenv 获取浮点环境 (函数)
rint 舍入至整数值 (函数)